﻿using System;
using System.Threading;

namespace Zo.Tasks
{
    /// <summary>
    /// 多线程任务接口。
    /// </summary>

    public interface IThreadTask
    {
        /// <summary>
        /// 增加新任务。
        /// </summary>
        /// <param name="work">工作方法。</param>
        void AddTask(Action work);

        /// <summary>
        /// 增加新任务。
        /// </summary>
        /// <param name="work">工作方法。</param>
        /// <param name="value">传入的值。</param>
        void AddTask(Action<object> work, object value);
    }

    /// <summary>
    /// 默认多线程任务处理。
    /// </summary>
    internal sealed class DefaultThreadTask : IThreadTask
    {
        /// <summary>
        /// 增加新任务。
        /// </summary>
        /// <param name="work">工作方法。</param>
        public void AddTask(Action work)
        {
            ThreadPool.QueueUserWorkItem(obj => work());
        }

        /// <summary>
        /// 增加新任务。
        /// </summary>
        /// <param name="work">工作方法。</param>
        /// <param name="value">传入的值。</param>
        public void AddTask(Action<object> work, object value)
        {
            ThreadPool.QueueUserWorkItem(obj => work(obj), value);
        }
    }
}